Atklājiet laikrindu datu jaudu, izmantojot loga funkcijas. Šī rokasgrāmata aptver būtiskus jēdzienus, praktiskus piemērus un progresīvas metodes datu analīzei.
Laikrindu analīze: loga funkciju apgūšana datu ieskatiem
Laikrindu dati, ko raksturo to secīgā un no laika atkarīgā daba, ir visuresoši dažādās nozarēs. Sākot ar akciju cenu izsekošanu un vietņu datplūsmas uzraudzību līdz sensoru rādījumu analīzei un pārdošanas tendenču prognozēšanai, spēja iegūt jēgpilnus ieskatus no laikrindu datiem ir izšķiroša informētu lēmumu pieņemšanai. Loga funkcijas nodrošina jaudīgu un elastīgu rīku kopumu, lai veiktu aprēķinus pār rindu kopu, kas ir saistīta ar pašreizējo rindu tabulā vai datu ietvarā, padarot tās neaizstājamas laikrindu analīzē.
Izpratne par laikrindu datiem
Laikrindu dati ir datu punktu secība, kas indeksēta laika secībā. Datu punkti var attēlot dažādus rādītājus, piemēram:
- Finanšu dati: Akciju cenas, valūtas kursi, tirdzniecības apjomi
- Pārdošanas dati: Dienas, nedēļas vai mēneša pārdošanas apjomi dažādiem produktiem
- Sensoru dati: Temperatūras rādījumi, spiediena mērījumi, mitruma līmeņi
- Tīmekļa datplūsmas dati: Vietnes apmeklējumi, lapu skatījumi, atlēcienu līmenis
- Enerģijas patēriņa dati: Stundas vai dienas elektroenerģijas patēriņš
Laikrindu datu analīze ietver modeļu, tendenču un sezonalitātes identificēšanu, ko var izmantot nākotnes vērtību prognozēšanai, anomāliju atklāšanai un biznesa procesu optimizēšanai.
Ievads loga funkcijās
Loga funkcijas, zināmas arī kā logotie agregāti vai analītiskās funkcijas, ļauj veikt aprēķinus pār rindu kopu, kas saistīta ar pašreizējo rindu, negrupējot rindas vienā rezultātu kopā, kā to dara tradicionālās agregātfunkcijas (piemēram, SUM, AVG, COUNT). Šī iespēja ir īpaši noderīga laikrindu analīzē, kur bieži nepieciešams aprēķināt slīdošos vidējos, kumulatīvās summas un citus uz laiku balstītus rādītājus.
Loga funkcija parasti sastāv no šādām sastāvdaļām:
- Funkcija: Aprēķins, kas jāveic (piem., AVG, SUM, RANK, LAG).
- OVER klauzula: Definē rindu logu, kas tiek izmantots aprēķinam.
- PARTITION BY klauzula (neobligāta): Sadala datus partīcijās, un loga funkcija tiek piemērota katrai partīcijai neatkarīgi.
- ORDER BY klauzula (neobligāta): Norāda rindu secību katrā partīcijā.
- ROWS/RANGE klauzula (neobligāta): Definē loga ietvaru, kas ir rindu kopa attiecībā pret pašreizējo rindu, ko izmanto aprēķinam.
Galvenie jēdzieni un sintakse
1. OVER() klauzula
OVER()
klauzula ir loga funkcijas sirds. Tā definē rindu logu, ar kuru funkcija darbosies. Vienkārša OVER()
klauzula bez argumentiem uzskatīs visu rezultātu kopu par logu. Piemēram:
SQL piemērs:
SELECT
date,
sales,
AVG(sales) OVER()
FROM
sales_data;
Šis vaicājums aprēķina vidējos pārdošanas apjomus visiem datumiem sales_data
tabulā.
2. PARTITION BY
PARTITION BY
klauzula sadala datus partīcijās, un loga funkcija tiek piemērota katrai partīcijai atsevišķi. Tas ir noderīgi, ja vēlaties aprēķināt rādītājus dažādām grupām jūsu datos.
SQL piemērs:
SELECT
date,
product_id,
sales,
AVG(sales) OVER (PARTITION BY product_id)
FROM
sales_data;
Šis vaicājums aprēķina vidējos pārdošanas apjomus katram produktam atsevišķi.
3. ORDER BY
ORDER BY
klauzula norāda rindu secību katrā partīcijā. Tas ir būtiski, lai aprēķinātu pieaugošās kopsummas, slīdošos vidējos un citus uz laiku balstītus rādītājus.
SQL piemērs:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date)
FROM
sales_data;
Šis vaicājums aprēķina kumulatīvo pārdošanas summu laika gaitā.
4. ROWS/RANGE
ROWS
un RANGE
klauzulas definē loga ietvaru, kas ir rindu kopa attiecībā pret pašreizējo rindu, ko izmanto aprēķinam. ROWS
klauzula norāda loga ietvaru, pamatojoties uz fizisko rindas numuru, savukārt RANGE
klauzula norāda loga ietvaru, pamatojoties uz ORDER BY
kolonnas vērtībām.
ROWS piemērs:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
sales_data;
Šis vaicājums aprēķina pārdošanas apjomu slīdošo vidējo pēdējo 3 dienu laikā (ieskaitot pašreizējo dienu).
RANGE piemērs:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
sales_data;
Šis vaicājums aprēķina pārdošanas apjomu slīdošo vidējo pēdējo 2 dienu laikā (ieskaitot pašreizējo dienu). Ņemiet vērā, ka `RANGE` prasa sakārtotu kolonnu, kurai ir skaitlisks vai datuma/laika datu tips.
Biežākās loga funkcijas laikrindu analīzei
1. Slīdošais/mainīgais vidējais
Slīdošais vidējais, zināms arī kā mainīgais vidējais, ir plaši izmantota tehnika, lai izlīdzinātu īstermiņa svārstības laikrindu datos un izceltu ilgtermiņa tendences. To aprēķina, vidējojot vērtības noteiktā laika logā.
SQL piemērs:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
sales_data;
Šis vaicājums aprēķina pārdošanas apjomu 7 dienu slīdošo vidējo.
Python piemērs (izmantojot Pandas):
import pandas as pd
# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns
sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()
Globāla pielietojuma piemērs: Starptautisks mazumtirgotājs varētu izmantot 30 dienu slīdošo vidējo, lai izlīdzinātu ikdienas pārdošanas svārstības un identificētu pamatā esošās pārdošanas tendences dažādos reģionos.
2. Kumulatīvā summa
Kumulatīvā summa, zināma arī kā pieaugošā kopsumma, aprēķina vērtību summu līdz pašreizējai rindai. Tā ir noderīga, lai izsekotu kopējo uzkrāto vērtību laika gaitā.
SQL piemērs:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data;
Šis vaicājums aprēķina kumulatīvo pārdošanas summu laika gaitā.
Python piemērs (izmantojot Pandas):
import pandas as pd
# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns
sales_df['cumulative_sales'] = sales_df['sales'].cumsum()
Globāla pielietojuma piemērs: Starptautiska e-komercijas kompānija var izmantot kumulatīvos pārdošanas apjomus, lai izsekotu kopējiem ieņēmumiem no jauna produkta laišanas tirgū dažādās valstīs.
3. Lead un Lag
LEAD
un LAG
funkcijas ļauj piekļūt datiem attiecīgi no nākamajām vai iepriekšējām rindām. Tās ir noderīgas, lai aprēķinātu perioda pret periodu izmaiņas, identificētu tendences un salīdzinātu vērtības dažādos laika periodos.
SQL piemērs:
SELECT
date,
sales,
LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
sales_data;
Šis vaicājums aprēķina pārdošanas apjomu atšķirību salīdzinājumā ar iepriekšējo dienu. Funkcija `LAG(sales, 1, 0)` iegūst pārdošanas vērtību no iepriekšējās rindas (nobīde 1), un, ja iepriekšējās rindas nav (piemēram, pirmajā rindā), tā atgriež 0 (noklusējuma vērtība).
Python piemērs (izmantojot Pandas):
import pandas as pd
# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns
sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)
Globāla pielietojuma piemērs: Globāla aviosabiedrība var izmantot "lead" un "lag" funkcijas, lai salīdzinātu biļešu pārdošanas apjomus vienam un tam pašam maršrutam dažādās nedēļās un identificētu potenciālās pieprasījuma svārstības.
4. Rank un Dense Rank
RANK()
un DENSE_RANK()
funkcijas piešķir rangu katrai rindai partīcijā, pamatojoties uz norādīto secību. RANK()
piešķir rangus ar pārtraukumiem (piem., 1, 2, 2, 4), savukārt DENSE_RANK()
piešķir rangus bez pārtraukumiem (piem., 1, 2, 2, 3).
SQL piemērs:
SELECT
date,
sales,
RANK() OVER (ORDER BY sales DESC) AS sales_rank,
DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
sales_data;
Šis vaicājums sarindo pārdošanas vērtības dilstošā secībā.
Globāla pielietojuma piemērs: Globāls tiešsaistes tirgus laukums var izmantot ranga funkcijas, lai identificētu vislabāk pārdotos produktus katrā valstī vai reģionā.
Progresīvas metodes un pielietojumi
1. Loga funkciju apvienošana
Loga funkcijas var apvienot, lai veiktu sarežģītākus aprēķinus. Piemēram, jūs varat aprēķināt kumulatīvās summas slīdošo vidējo.
SQL piemērs:
SELECT
date,
sales,
AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
(
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data
) AS subquery;
2. Loga funkciju izmantošana ar nosacītu agregāciju
Jūs varat izmantot loga funkcijas kopā ar nosacītu agregāciju (piemēram, izmantojot CASE
priekšrakstus), lai veiktu aprēķinus, pamatojoties uz konkrētiem nosacījumiem.
SQL piemērs:
SELECT
date,
sales,
AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
sales_data;
Šis vaicājums aprēķina pārdošanas slīdošo vidējo tikai tām dienām, kad pārdošanas apjomi ir lielāki par 100.
3. Laikrindu dekompozīcija
Loga funkcijas var izmantot, lai sadalītu laikrindu tās tendences, sezonālajās un atlikuma komponentēs. Tas ietver slīdošo vidējo aprēķināšanu, lai novērtētu tendenci, identificētu sezonālos modeļus un pēc tam atņemtu tendences un sezonālās komponentes, lai iegūtu atlikumus.
4. Anomāliju atklāšana
Loga funkcijas var izmantot, lai atklātu anomālijas laikrindu datos, aprēķinot slīdošos vidējos un standarta novirzes. Datu punkti, kas atrodas ārpus noteikta diapazona (piemēram, +/- 3 standarta novirzes no slīdošā vidējā), var tikt atzīmēti kā anomālijas.
Praktiski piemēri dažādās nozarēs
1. Finanses
- Akciju cenu analīze: Aprēķināt akciju cenu slīdošos vidējos, lai identificētu tendences un potenciālos pirkšanas/pārdošanas signālus.
- Riska pārvaldība: Aprēķināt portfeļa atdeves slīdošās standarta novirzes, lai novērtētu svārstīgumu un risku.
- Krāpšanas atklāšana: Identificēt neparastus darījumu modeļus, salīdzinot pašreizējos darījumu apjomus ar vēsturiskajiem vidējiem rādītājiem.
2. Mazumtirdzniecība
- Pārdošanas prognozēšana: Izmantot slīdošos vidējos un kumulatīvos pārdošanas datus, lai prognozētu nākotnes pārdošanas tendences.
- Krājumu pārvaldība: Optimizēt krājumu līmeņus, analizējot pagātnes pārdošanas datus un identificējot sezonālos modeļus.
- Klientu segmentācija: Segmentēt klientus, pamatojoties uz viņu pirkšanas uzvedību laika gaitā.
3. Ražošana
- Prognostiskā apkope: Izmantot sensoru datus no iekārtām, lai prognozētu potenciālas kļūmes un proaktīvi plānotu apkopi.
- Kvalitātes kontrole: Uzraudzīt ražošanas procesus un identificēt novirzes no gaidītās veiktspējas.
- Procesu optimizācija: Analizēt ražošanas datus, lai identificētu vājās vietas un optimizētu ražošanas procesus.
4. Veselības aprūpe
- Pacientu uzraudzība: Uzraudzīt pacientu vitālos rādītājus laika gaitā un atklāt anomālijas, kas varētu liecināt par veselības problēmu.
- Slimību uzliesmojumu atklāšana: Izsekot slimību izplatībai un identificēt potenciālos uzliesmojumus.
- Veselības aprūpes resursu sadale: Sadalīt resursus, pamatojoties uz pacientu vajadzībām un vēsturiskajiem pieprasījuma modeļiem.
Pareizā rīka izvēle
Loga funkcijas ir pieejamas dažādos datu apstrādes rīkos un programmēšanas valodās, tostarp:
- SQL: Lielākā daļa moderno relāciju datu bāzu pārvaldības sistēmu (RDBMS) atbalsta loga funkcijas, tostarp PostgreSQL, MySQL (versija 8.0+), SQL Server, Oracle un Amazon Redshift.
- Python: Pandas bibliotēka nodrošina lielisku atbalstu loga funkcijām, izmantojot
rolling()
unexpanding()
metodes. - Spark: Apache Spark SQL un DataFrame API arī atbalsta loga funkcijas.
Rīka izvēle ir atkarīga no jūsu konkrētajām vajadzībām un tehniskajām zināšanām. SQL ir labi piemērots datiem, kas glabājas relāciju datu bāzēs, savukārt Python un Spark ir elastīgāki lielu datu kopu apstrādei un sarežģītas analīzes veikšanai.
Labākās prakses
- Izprotiet datus: Pirms loga funkciju lietošanas rūpīgi izprotiet savu laikrindu datu īpašības, tostarp to biežumu, sezonalitāti un potenciālās anomālijas.
- Izvēlieties atbilstošu loga izmēru: Loga izmēra izvēle ir atkarīga no konkrētās analīzes, ko veicat. Mazāks loga izmērs būs jutīgāks pret īstermiņa svārstībām, savukārt lielāks loga izmērs izlīdzinās datus un izcels ilgtermiņa tendences.
- Apsveriet robežgadījumus: Apzinieties, kā loga funkcijas apstrādā robežgadījumus, piemēram, trūkstošus datus vai laikrindas sākumu un beigas. Izmantojiet atbilstošas noklusējuma vērtības vai filtrēšanas metodes, lai apstrādātu šos gadījumus.
- Optimizējiet veiktspēju: Loga funkcijas var būt skaitļošanas ziņā dārgas, īpaši lielām datu kopām. Optimizējiet savus vaicājumus un kodu, lai uzlabotu veiktspēju, piemēram, izmantojot atbilstošus indeksus un particionēšanas stratēģijas.
- Dokumentējiet savu kodu: Skaidri dokumentējiet savu kodu un vaicājumus, lai paskaidrotu loga funkciju mērķi un loģiku. Tas atvieglos citiem saprast un uzturēt jūsu kodu.
Noslēgums
Loga funkcijas ir jaudīgs rīks laikrindu analīzei, kas ļauj aprēķināt slīdošos vidējos, kumulatīvās summas, nākamās/iepriekšējās vērtības un citus uz laiku balstītus rādītājus. Apgūstot loga funkcijas, jūs varat atklāt vērtīgus ieskatus no saviem laikrindu datiem un pieņemt pārdomātākus lēmumus. Neatkarīgi no tā, vai analizējat finanšu datus, pārdošanas datus, sensoru datus vai tīmekļa datplūsmas datus, loga funkcijas var palīdzēt jums identificēt modeļus, tendences un anomālijas, kuras būtu grūti atklāt, izmantojot tradicionālās agregācijas metodes. Izprotot galvenos jēdzienus un loga funkciju sintaksi un ievērojot labākās prakses, jūs varat tās efektīvi izmantot, lai risinātu plašu reālās pasaules problēmu klāstu dažādās nozarēs.